From: Joan Torres Lopez Date: Tue, 3 Feb 2026 13:43:43 +0000 (+0100) Subject: main: Call RegisterDisplay once UI has initialized X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~39^2~1^2~1 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=714332d3065a41e8bae61234cd231219cfcc95d6;p=gnome-shell.git main: Call RegisterDisplay once UI has initialized RegisterDisplay is called to signal that graphics have settled, which allows GDM to terminate pending greeters and plymouth. Previously, RegisterSession was used for both recording the login and terminating greeters. This caused a race condition where the new user shell was setting up while the greeter was tearing down, leading to configuration conflicts during the asynchronous handoff. By splitting into RegisterSession (called early to record login) and RegisterDisplay (called after graphics settle), the greeter teardown is delayed until the new session has completed its initial modeset. Fixes: 32a01330 ("main: Register session with GDM on startup") Part-of: --- diff --git a/js/misc/loginManager.js b/js/misc/loginManager.js index 5b3825748..a66ebed03 100644 --- a/js/misc/loginManager.js +++ b/js/misc/loginManager.js @@ -71,6 +71,24 @@ export async function registerSessionWithGDM() { } } +export async function registerDisplayWithGDM() { + log('Registering display with GDM'); + try { + await Gio.DBus.system.call( + 'org.gnome.DisplayManager', + '/org/gnome/DisplayManager/Manager', + 'org.gnome.DisplayManager.Manager', + 'RegisterDisplay', + null, null, + Gio.DBusCallFlags.NONE, -1, null); + } catch (e) { + if (!e.matches(Gio.DBusError, Gio.DBusError.UNKNOWN_METHOD)) + log(`Error registering display with GDM: ${e.message}`); + else + log('Not calling RegisterDisplay(): method not exported, GDM too old?'); + } +} + let _loginManager = null; /** diff --git a/js/ui/main.js b/js/ui/main.js index 1b917f988..f485e7b62 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -370,6 +370,8 @@ async function _initializeUI() { sessionMode.currentMode !== 'initial-setup') _handleLockScreenWarning(); + LoginManager.registerDisplayWithGDM(); + if (perfModule) { const perfOutput = GLib.getenv('SHELL_PERF_OUTPUT'); Scripting.runPerfScript(perfModule, perfOutput);